home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / gemfsc18.lzh / AESSRC18.LZH / AESUTIL.S / RCSCALE.S < prev    next >
Text File  |  1992-04-05  |  2KB  |  54 lines

  1. ;*************************************************************************
  2. ;* RCSCALE.S - Scale source rect into dest using specified percentage.
  3. ;*             Dest is centered over/within source.
  4. ;*************************************************************************
  5.  
  6. _rc_scale::
  7.  
  8.           .cargs    #4,.psource.l,.pdest.l,.percentage.w
  9.                     
  10.           move.l    .psource(sp),a0     ; load psource
  11.           move.l    .pdest(sp),a1       ; load pdest
  12.           move.w    .percentage(sp),d2  ; load percentage
  13.           
  14.           tst.w     d2                  ; negative percentages are a 
  15.           bpl.s     .inrange            ; no-no, just force them
  16.           moveq.l   #100,d2             ; to 100%.
  17. .inrange:
  18.           move.w    4(a0),d0            ; load wsource
  19.           move.w    d0,d1               ; copy to wdest
  20.           mulu      d2,d1               ; multiply by percentage
  21.           divu      #100,d1             ; scale back down
  22.           
  23.           sub.w     d1,d0               ; calc pdest->g_x =
  24.           asr.w     #1,d0               ;   ((wsource - wdest) / 2) +
  25.           add.w     (a0),d0             ;   psource->g_x
  26.           move.w    d0,(a1)             ; store pdest->g_x.
  27.           
  28.           tst.w     d1                  ; if wdest was non-zero 
  29.           bne.s     .nzw                ; we're cool, else force
  30.           moveq.l   #1,d1               ; it to one, zero widths are ugly.
  31. .nzw:
  32.           move.w    d1,4(a1)            ; store pdest->g_w
  33.           
  34.           move.w    6(a0),d0            ; load hsource
  35.           move.w    d0,d1               ; copy to hdest
  36.           mulu      d2,d1               ; multiply by percentage
  37.           divu      #100,d1             ; scale back down
  38.           
  39.           sub.w     d1,d0               ; calc pdest->g_y =
  40.           asr.w     #1,d0               ;   ((hsource - hdest) / 2) +
  41.           add.w     2(a0),d0            ;   psource->g_y
  42.           move.w    d0,2(a1)            ; store pdest->g_y.
  43.           
  44.           tst.w     d1                  ; if hdest was non-zero 
  45.           bne.s     .nzh                ; we're cool, else force
  46.           moveq.l   #1,d1               ; it to one, zero heights are ugly.
  47. .nzh:
  48.           move.w    d1,6(a1)            ; store pdest->g_h
  49.           
  50.           move.l    a1,d0               ; return pdest
  51.           rts
  52.           
  53.            .end
  54.